perm filename PIX.SAI[PIX,HPM]25 blob
sn#238686 filedate 1976-09-22 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00043 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00006 00002 BEGIN "PIX"
C00009 00003 IF CHR="?" THEN
C00012 00004 IF CHR="T" THEN comment take a picture via a camera
C00014 00005 IF CHR="↑" THEN comment optimize clip levels
C00019 00006 IF CHR='175 THEN comment alter camera number
C00020 00007 IF CHR="B" THEN comment alter bits/pixel, size and # to average
C00022 00008 IF CHR="I" THEN comment input a file
C00024 00009 IF CHR="%" THEN comment give information about a file
C00027 00010 IF CHR="/" THEN comment input a portion of a file
C00030 00011 IF CHR="O" THEN comment output a file
C00031 00012 IF CHR="D" THEN comment video synthesizer display
C00035 00013 IF CHR="H" THEN comment high quality halftone
C00039 00014 IF CHR="R" THEN comment random halftone
C00041 00015 IF CHR="A" THEN comment arty bug halftone
C00043 00016 IF CHR="X" THEN comment send previous halftone to the XGP
C00044 00017 IF CHR=">" THEN comment make a DD buffer into an MIT transferrable file
C00045 00018 IF CHR="<" THEN comment display MIT transferrable file
C00046 00019 IF CHR="#" THEN comment switch a video switch output
C00047 00020 IF CHR="P" THEN comment list a picture on the tty
C00050 00021 IF CHR="∂" THEN comment add a letter to a font
C00052 00022 IF CHR="π" THEN comment output dd buf to jarvis term.
C00053 00023 IF CHR="λ" THEN comment make an XGPable file
C00055 00024 IF CHR="C" THEN comment step past a certain number of pictures
C00056 00025 IF CHR="K" THEN comment clear the video synthesizer
C00057 00026 IF CHR="↔" THEN comment gronk synthesizer intensity table
C00059 00027 IF CHR="S" THEN comment change size of displays
C00066 00028 IF CHR="F" THEN comment high pass filter
C00067 00029 IF CHR="L" THEN comment low pass filter
C00068 00030 IF CHR="W" THEN comment select a window
C00071 00031 IF CHR="Z" THEN comment change size of a picture
C00073 00032 IF CHR="*" THEN comment general geometric transformation
C00078 00033 IF CHR="U" THEN comment remove blank border from a picture
C00080 00034 IF CHR="N" THEN comment apply noise remover
C00081 00035 IF CHR="V" THEN comment apply interest operator
C00082 00036 IF CHR="M" THEN comment pixel modification
C00084 00037 IF CHR="G" THEN comment graph a histogram
C00087 00038 IF CHR="J" THEN comment graph a histogram
C00090 00039 IF CHR="E" THEN comment apply histogram normalizer
C00093 00040 IF CHR="Y" THEN comment apply vert sync loss correction
C00094 00041 IF CHR="Q" THEN comment exit
C00095 00042 BEGIN comment an unrecognized character
C00097 00043 END
αC00100 ENDMK
C⊗;
BEGIN "PIX"
REQUIRE "VIXHDR.SAI[VIS,HPM]" SOURCE_FILE;
require "outdd.rel[s,pmf]" load_module;
external procedure outdd(string s; INTEGER SPOS(2), PPOS(-1));
INTEGER CAMERA,CHR,HIG,WID,BITS,PWANT,PHAVE,PDEFAULT;
STRING BACKLOG; REAL SSIZE,HSIZE,SASPECT,HASPECT;
INTEGER SDISWID,SDISHIG,SYPOS; REAL MAPTF; INTEGER MAPBT;
INTEGER HDISWID,HDISHIG,HAPOS;
BOOLEAN INITED,SYNLAS,HAFTONE;
INTEGER BCL,TCL,SUMS,XEE,YEE,NRTRY;
boolean outddcalled;
REAL TASPECT,TLEN,TWID;
REAL LXB,LYB,UXB,UYB;
INTEGER PROCEDURE UCONV(INTEGER I);
RETURN(IF I>'140 ∧ I≤'172 THEN I LAND '137 ELSE I);
LXB←LYB←-1; UXB←UYB←1;
BCL←7; TCL←0;
YEE←0; XEE←1;
CAMERA←'54; BACKLOG←""; INITED←FALSE; SYNLAS←TRUE; HAFTONE←FALSE;
HIG←260; WID←288; BITS←4; SUMS←1;
PDEFAULT←PWANT←PHAVE←PIXDIM(HIG,WID,BITS);
TASPECT←6/10; TLEN←60; TWID←60; NRTRY←100;
SSIZE←HSIZE←.5; SASPECT←HASPECT←260/288; MAPTF←1; MAPBT←4;
SDISWID←HDISWID←SDISHIG←HDISHIG←1; HAPOS←SYPOS←1;
DDINIT; SCREEN(-1,-1,1,1);
synmap(0,-1);
outddcalled←false;
ttyup(true);
OUTSTR("TYPE ? FOR HELP"&'15&'12);
WHILE TRUE DO
BEGIN¬
INTEGER ARRAY PIC[0:PHAVE];
IF PHAVE=PDEFAULT THEN
BEGIN¬
MAKPIX(HIG,WID,BITS,PIC[0]);
INITED←TRUE;
END;
WHILE PHAVE-PWANT DO
BEGIN
MAPBT←MAPBTMAX PIC[BYBI];
IF LENGTH(BACKLOG)=0 THEN¬
BEGIN
OUTSTR("*");
DO CHR←UCONV(INCHRW) UNTIL CHR≠'15;
END
∀@@@@A∃→'
A
⊃%?+
∨∃,Q1∨ Q¬¬π↔→∨≤RRv~(_@@@@A∪↓π⊃$zλ}DA)!≤~∀@@@@@@A¬∃∂∪≤~(@@@@@@@A=kiII
CYYK⊃?iek∀v~∀@@@@@@A∨+QIHPD@@@@@@@@@@@@@@@@@@A!%pAπ←5[C]IL~∀
∀λE(DD↓iCWJ↓BAaS
iceJ↓Me←Z↓Gkee∃]iYr↓gKYK
iKHAM←keG∀~∀DEλDDX@λE<DD0@yCYQ[←IJxAgKhαβ['∪,yβ∪'>KS'k/⊃βCπ⊗7↔S/∪M84R↓↓↓↓∧⊃β''→?Oπoβ3∃1π;';∪␈91αyε≠3'Aεc↔[↔g→1↓s∞cQiβ6K∪↔=¬≠?WK≡)↓#∪.3πW3#iQQ$hQ
%∩⊃1↓ ∀y βNsCWQε{Iβ?/#CWQπβ'∂S/∪↔Mβ7∪?5β␈⊃βS=ε β≠'f(4) ∩) 1α⊃ = ∩β≠?Iπ3↔KeεcπK∨*β≠'3/→9↓∃ε;↔SMε#'7↔w≠'?;~a↓=β⊗+π∪MεK9β¬πβπKPhP4) ∀! β&KOC3∂IβS#*β∂WK⊗+;Qβ∧K∂SW⊗)β?9π##∃β6K∪↔=π≠g;SF+O'k/⊂4) ∀A 1α⊃
I ∩β?I↓∩∩¬ ε#'OCfeβ'"βπMβ
β#π37#?;∃αB!β∨}{⊃1α∩βKπ;&{51α
βπKSJH4) ∃↓ 1α⊃λ! ∩β≠?Iε β∂#∂∪π∂S/⊃β∪'∨β3πerαAβ?rβS#∃π#↔K7Nsπ11Aβ≠?∩β#π35#?;∃ε3?;S_h)
B⊃ 1↓∩⊂= ε{WSC/!βS#*β7?O"βK↔∂.sQβ∪O≠C3πJaαaβ}qβS#*αb∞Ab=βSzβ¬β≠}sQβ≠Lc∀4)∩⊃q b↓ y∩⊃β≠?∩α6&Qπ#Kπ;≡3↔KK∞∪3∃β6K3↔Mr↓qβSzβ∪'Oεcπeβ}s∃1↓rβS=βn/∃β|s∀4(hQ
M∩⊃βO↔"β7W3&KC3'≡KSe1π≠#πC*βπ;⊃π≠'k∃ε{⊃β∪O≠C3πO→9β∪.3πW3#iGaEb↓E=Iπ≠'k∀hQ
∩⊃βO/O↓βCπ≤εBε
nVn⊗↑ ε}∩∞9F␈'4¬π>F]dε&O>
F∂N≥lrεo]NFOεLTπεN>NW⊗/5⊃PR∩)4"∩b∧$!:∩$⊗66\>Bπ6≤LVzπ?≥g&F↑=↔V/%D∧Zε=LV∂∩
≡Bb↓t⊗&W↑:BεNnLVw≡≡O∩π&≤-F(h$$"~∩$6}vl\7"ε∀f␈⊗]≤vrπm≤F.z∞>vO&=∧εfNlTπ&z∀ε>Ol]bε≡≥fv.AQ hR$*r∩∩D∧"∃R$!Bα∩%$"∩ε|]vn/N-⊗~πN,⊗v6}-W~r
tπ>NlMw:b$π≡O,UBαR|Vv/,≥@hR$+∩∩∩D∧"∃*$$ε6O picture. Y vertical sync, U remove black border
""F"", ""L"", ""N"" or ""V"" filter the picture
F high pass, L low pass (halve resolution), N remove noise, V interest
""G"" or ""J"" graph the numbers of each grey level. G raw, J integrated
""E"" enhance a picture (normalize the instances of each grey level)
""M"" modify grey levels via a function (entered piecewise linear)
""Q"" quit");
OUTSTR('15&'12);
END
ELSE
IF CHR="T" THEN comment take a picture via a camera;
BEGIN
INTEGER NRT;
IF PHAVE=PDEFAULT THEN
BEGIN
IF ¬INITED THEN
BEGIN
MAKPIX(HIG,WID,BITS,PIC[0]);
INITED←TRUE;
END;
NRT←CAMPIX(CAMERA,YEE,XEE,PIC[0],SUMS,BCL,TCL,NRTRY);
OUTSTR(" "&(IF NRT<0 THEN " aborted" EHSE
CVS(NRT)&" RETR"&(IF NRT≠1 THEN "IES" ELSE "Y"))&'15&'12);
IF NRT≥0 THEN
OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
" BYTES/LIN@
ApDMπ-LQ!βπm¬3¬∪tRLDA ∪)&← 3)
D_NbjL≤bdRv4∀@@@@@@@@@A9λ~)α↓↓↓↓α↓↓α⊗e~∀4)α↓↓↓↓α↓↓↓↓αα
⊗≡Lp4)↓α↓↓↓↓α↓↓↓↓∧∩ε∞.dz≡⎇
"⊃l4)α↓↓↓↓α↓↓↓↓ααB↑εu"}B∩,2εV2#X4)↓α↓↓↓↓α↓↓↓↓∧*:⊃lhQ↓↓↓α↓↓↓↓∧*:⊂4R↓↓↓↓αα⊗"N(h(1↓↓α↓↓α&2α∞"Ij∩y α$B⊗9β≡{77↔w!β?C&K7'k*β∂3'αβ3↔[.cMl4R↓↓↓↓α↓↓↓α∀*≡&8hQ↓↓↓α↓↓↓↓¬~RJ&t9αN&sYα&:$*≡⊗I∧2>=lhQ↓↓↓α↓↓↓↓∧zVRN%⊃! r≥⊃yα~⎇⊃αεV$yα>I¬"∞2&αaα
∞dJA↓!↓bR∞2Mr
∞dJ@q]KQ %m¬~&:@y→d≤EyG0hR∧∧ααα∧∧α∧Ld D,tzIαE≤→e⊃[α
I∧,pQ$ααα∧∧ααα∧∧α∧∀Xy∀ph!∀ααα
H4e|→jE≤≤→e¬≤LeHd|Z↔1PPJ∧∧α∧∀9KtLuJ84r
9∀rdiyrKXQ$ααα∧∧ααα∧∧α∧,hAPRα∧∧ααα∧∧∧,e8QPRα∧∧ααα∧∧αααλ(T<LaQ"αα∧∧ααα∧∧αα∧→jD,<Z$∧
∃(≠∩¬%6π%∧MλI∀jD _re<_EC"MW1PRα∧∧ααα∧∧ααα →e$,xZ"∧u*G0hPQ$ααα∧∧ααα∧∧α∧l→:∧MB ∀:ey_Bc"JK3¬j↔1PRα∧∧ααα∧∧ααα j%%|8→U∧M¬λ4lZ(∩eLXUED,UJE[¬UF∩d∀9Ks:eH9E{αIj%%∃∃↔0hR∧∧ααα∧∧ααα∧ u-%:J"B∩∧∧"2D_d∧u∃GFα¬$λYbα∩≤&␈↔L\B∩∧YJ4(h$∧ααα∧∧ααα∧∧ααα∧∧αα∧:j2Du*E∩2∩
(U%∩$e∧L2 j%![∀
DD,d∧$L-4$∧,e8Tα∃J%∃∩2;⊗Tb;%↔0hR∧∧ααα∧∧ααα∧ ∀2∧j*Akα
I∧,pQ$ααα∧∧ααα∧∧ααα∧λ$,<→aPRα∧∧ααα∧∧ααα∧∧α∧LjHT<-$λ∃∃∀≠∀¬%%6π#-W1PRα∧∧ααα∧∧ααα∧∧α∧LjHT<-$ ∩e~Jπ0hR∧∧ααα∧∧ααα∧∧αα∧ ~5$|u
E[¬UJE%[Q∪Xh$∧ααα∧∧ααα∧∧ααα
;sβXQ$ααα∧∧ααα∧∧ααα∧λd⎇∩ ≠sα¬:HUαβ∀
Tu$→Dβ:∧It¬≥⎇55¬%%9≠U⎇%K2"TMU:E%[%)∩[
U↔0hR∧∧ααα∧∧ααα∧∧αα¬H9E{β4
¬{β4
tDLHTαE¬z¬5%%6uU$≤KU∪e~VfB∧$t
D≤ezH4b[↔1PRα∧∧ααα∧∧ααα∧∧α∧∀9Ks;Z
sβZ
y∧LdT¬¬¬⎇¬:E%[uX$≤eU↔E~+⊗$∧$zλ(4e|(9Bk1Q"αα∧∧ααα∧∧ααα∧∧∧⎇-J:E∩B*H4dMπT"4≥j5¬$≤E∀b∩αλ(4dMπT"4≥j5∧∀≤E∀b;Tds∩↔1PRα∧∧ααα∧∧ααα∧∧α∧,hG0hPQ$ααα∧∧ααα∧∧α∧,hG0hR∧∧ααα∧∧α∧,hAPRα∧∧αα∧YJ4(h bα∧∧αα∧_d∧≤E'Ts;T
DD,a≤6}n\]g"α≥G&/$6∞n↑,∩εw]\&/∪1Q"αα∧∧ααα∧λ$,<→aPRα∧∧ααα∧∧∧⎇
J:E∩B$λ4DihTb∧jYT∀-'$"KXQ$ααα∧∧αααλ8∀l-(≠t≥4u ∀t≤
yBKXQ$ααα∧∧αααλ(4e{w4¬$≤KvβXh$∧ααα∧∧αα∧Yh@hR∧∧αααλYE≤(Q bα∧∧αα∧_d∧≤E'T$∩∩
I∧,p≤=vnn]nBαε≥NF/∩-↔'~}
↔F.EDπ≡O,Tε∞vD∧2π&t↔6/,≤v+XQ$ααα∧∧αααλ(T<LaQ"αα∧∧ααα∧ ∀u$XxU∩¬EHd|{4
5%∀→hr∧Lj:CXh!Q"αα∧∧ααα∧ u-%:J"B∩
∀≥%Z(R∧DY_tE"D
tL%IαDtztα∩4:j2DD_u∩2∩D∧"4≥j5¬<LE∀b∩K$%∪Xh$∧ααα∧∧αα∧→j5%|→h4E<G1PRα∧∧ααα∧∧∧L2 HTt=I¬∧Lu:E∪s∩
I∧,pQ$ααα∧∧ααα∧∧α∧∀Xy∀ph$∧ααα∧∧ααα∧∧∧DL{y∀u%88∀rD→j5"diyrKZ
y∀%|→jE≤≤→e∧Lu:ED4|u↔0hR∧∧ααα∧∧ααα∧λTt#1Q hR∧∧ααα∧∧α∧⎇ZJ5%∩∧$¬∧L:JU∀*_T$<UD¬D,HxRαDizrα∩h:e~E_XR+∩∀d"bα$h55~λT*Jd%∪B∩↔1PRα∧∧ααα∧∧∧LU:KtLt9
tcXQ$ααα∧∧ααα _b∧dYhu$B →e≥"↔f"¬$λY`hR∧∧ααα∧∧ααα∧λ$,<α3C!$λλλ∧∧λλλ∧∧λ⊗1([NTSCAN(INST,FOO); XEE←INTSCAN(INST,FOO) MAX 1;
END;
OUTSTR(" NO. OF PICTURES TO AVERAGE (NOW "&CVS(SUMS)&"):");
T←CVD(INCHWL); IF T>0 THEN SUMS←T;
OUTSTR(" BITS/PIXEL (NOW "&CVS(BITS)&"):");
T←CVD(INCHWL); IF T>0 THEN BITS←T MIN 36;
OUTSTR(" SUPPRESS PARTIAL RETRIES?");
NRTRY←(IF (INCHWL LAND '137)="Y" THEN -200 ELSE 100);
PDEFAULT←PWANT←PIXDIM(HIG,WID,BITS);
END
ELSE
IF CHR="I" THEN comment input a file;
BEGIN
STRING FN;
IF LENGTH(BACKLOG)=0 THEN
BEGIN~∀@@@@@@@@A∨+)M)$PE→∪→
tλRv~∀@@@@@@@@A∪A1≥∂) Q
≥?%≥π⊃/0R|`@⊂A!
→⊃∪~Q
8R|`AQ⊃≤~(@@@@@@@@@@@@A¬∂%≤~∀@@@@@@@@@@@@AA/β≥)⎇!
→ %~Q
≤$v~∀@@@@@@@@@@@@A βπ↔→=∂>E∩λM
≤v4∀@@@@@@@@@@@@A≥⊂A→'∀A∨+)M)$PE¬E←ei∃HDLNDjLNbHRv~∀@@@@@@@@A≥λ4∀@@@@@@@↓→'
4∀@@@@@@@@@A¬∃∂∪≤~(@@@@@@@@@A∂Q!
_Q βπ↔→=∞Q!∪
6a:Rl~∀@@@@@@@@@A=+)')HQπ-&!!∪π7Aπ→≥:$LDA→%≥&A`@DMπY&Q!∪
7→≥¬e:RL~(@@@@@@@@@@@@DA¬3Q&←→%≥αApDMπ-LQ!βπm¬3¬∪tRLDA ∪)&← 3)
D_NbjL≤bdRv4∀@@@@@@@@@A¬¬π↔ ∨≥>DDv4∀@@@@@@@@@A∪9∪) ⎇
β→'∀v~∀@@@@@@@@@↓∃λv4∀@@@@@@@↓≥λ~(@@@@A→'∀~∀_@@@@A∪↓π⊃$zλJDA)!≤∪G=[[K]P@AOSYJAS]→←e[CQS←\A¬E←kh↓BAMS1Jv~∀@@@@@@A¬∃∂∪≤~(@@@@@@@AM)%∪≥≤A
≤v4∀@@@@@@@↓∨#)'Q$PE
%→
dD$v~∀@@@@@@A∪↓→≥∂Q⊂Q
≥⎇∪≥π⊃]_R|`λA!
1 ∪~Q→_R|`↓)⊃≤4∀@@@@@@@@@A¬∃∂∪≤~(@@@@@@@@@A∪≥Q∂$↓β%%βdA⊃ 6@tba:l~∀@@@@@@@@@A≥)!
⊂Q
≤Y! 6a:αIl4)α↓↓↓↓α↓↓↓↓αα>VR≥"I"∞5→""∩]α∞2:jI→ αdJ:εMπA↓ ~≥2M""%Z2:
Mi%_∀R↓↓↓↓α↓↓↓↓α↓↓↓↓α⊃α
f$*M>2Lr∃β@∧∧"4≥j5∧D%8+∀∀MU∀b∩∧)~E~|+~D*∩dv∪*2v⊗"KXQ$ααα∧∧ααα∧∧α∧,hD∧,e8T∧⎇
J:E∩B,≤&␈↔L\B∩2v⊗R2≠⊗!∪Xh$∧ααα∧∧αα∧Yh@hR∧∧αααλYE≤(Q bα∧∧αα∧_d∧≤E'P"z∩λI∧,pα8{m]9;]∧∧~;\∞↑λ_ ∞
|]~-⎇H≠p∪λ0P3$[2YFEλ⊂⊂⊂⊂λ⊂⊂⊂!⊃c` N
STRING FN,IJFL; OWN INDEGER LY,LXHY,HX,CMP,BT;
INTEGER FOO;
IF LENGTH(BACKLOG)=0 THEN~∀@@@@@@@@A¬∂%≤~∀@@@@@@@@@↓∨ ⊗R≥"I!
4J2∃I∩Il4)α↓↓↓↓α↓↓↓↓αα&→αd*:=I¬∧4uy→d≤EyE∪sαD¬∧4HI∀jDie∪sα
I∧,pβ"H∧∧λλλ∧∧λλλ∧∧λλ⊂HXp3C!$λλλ∧∧λλλ∧∧λλλ∧ 3U⊃(x4H⊂**P6( λ⊗l∞F⊗↔.c!$λλλ∧∧λλλ∧∧λλλ∧λq1∀λh
⊃SEI⊃⊗lU.c"D∧λλλ∧∧λλλ∧∧λλλ z5∀u
%⊂uTe ⊃⊗tλ9∪W"$dH∪∩)hαiP,λ⊃∪!k∀T$"-S'!,nJSαE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊃⊂!⊗j"iWS$g"P≡⊂⊃∪!U)P$"⊗a(a$WTS⊃⊂⊂αITS/BYTE"&'15&'12);
BACKLOG←"/"&FN;
OUTSDR("LOW Y, LOW X (IN PIXELS):"); INFL←INCHUL;
LYWINTSCAN(INFL,FOO)9 LX←INDSAAN(ILFL,FOK);
LY←(LY MAX 0) MIN (HD[PCLN]-1); LX←(LXMAX 0) EIN (HD[LNBY]-1);
OUTSTR("LIJEAR COMPRESSIOJ FACTOR:"); INBL←INCHWL;
CMP←@∪≥Q'πβ≤!∪≥
_1
∨≡Rl~∀@@@@@@@@@@@Aπ≠A?π≠ ↓≠β0@Dv~∀@@@@@@@@@@@A∨U)')$ A⊃∪≥⊃(HA]∪ )⊂↓β≥λA ∪)&←A∪1_↓∨A%∃'+→(hDRfA%≥¬→?%≥π⊃/0v~∀@@@@@@@@@@@A⊃e?∪≥)Mπβ≤Q%≥
_Y→∨≡RvA⊃1?%≥)'π¬≤Qβ≥→_Y
∨<Rv~∀@@@@@@@@@@@A%A⊃2t`A)⊃∃≤A⊃3|djlv↓∪A⊃`z`A)!≤A⊃a>djll~∀@@@@@@@@@@@A⊃3|Q⊃2A5β0@b$A≠∪≤Q⊃ 7Aπ→≥:5→2RK
≠ v~(@@@@@@@@@@@@↓⊃1>Q!0A≠β`@bRA5∪≤@Q! 7→≥ 3:[→`RKπ≠@v~∀@@@@@@@@@@@A¬Q?∪≥)Mπβ≤Q%≥
_Y→∨≡Rv↓∪A¬Pz`A)!≤A¬Q?⊃ 7 3¬∪:l~∀@@@@@@@@@@@A¬)|Q¬(A5β0@b$A≠∪≤flv~(@@@@@@@@@@@@↓!/β≥Q?!∪1⊃∪~Q⊃dY⊃0Y (Rv~(@@@@@@@@@@@@↓∃λA∃→'
A=+)' HPECE=eaKHλLNbj_NbdRl~∀@@@@@@@@@A∃≥~∀@@@@@@A1'
~∀@@@@@@@@A¬∂%≤∩∀@@@@@@@@@↓≠β↔!%0Q⊃∩1⊃0I¬PY!βπla2Rv4∀@@@@@@@@@A∂∃)!
!¬βπ↔1∨∞Y!%π6a:αb2e2eA2∞6αb∞&AKX4)↓α↓↓↓↓α↓↓↓↓∧zVRNαJ"D≥j5¬∧L9:∧≤dkQ∩2∩ I∀t4h⊗∧∧IPuJ5∀∩0k9∪PV+U)C"D∧λλλ∧∧λλλ∧∧λλλ∧$⊂V5λZhπf$S ¬ xDEπ-LQ!&≥Z
f
Mi%→ ∧∩&RM|∩fR∃⊂1≥EU29EI%Xh)↓↓α↓↓↓↓α↓↓↓α∀
∞.Ixuz∩'1PRα∧∧ααα∧∧ααα →dM$XKt4J8SXh$∧ααα∧∧ααα∧∧∧,@Q∞c!$λλλ∧∧λλλλYQβ"D∧λλλ∧λ3∀q!Q@↓Dλλλ∧∧∩1Hλ9∀O(ItH∃∩λYB8{m]9;]∧∧≠⎇=∞∞=λ_$Z;→'1"Hλ∧∧λλλ∧∧⊂Q1i→@εE⊂λ⊂⊂⊂⊂λ⊂⊂)j∀$g#P⊃'≥FEλ⊂⊂⊂⊂λ⊂⊂⊂'Uj)j)
⊃#$f⊃]⊃∀]CE⊂⊂⊂λ⊂⊂⊂⊂λ$c⊂&⊃g#j$
#'/dS!d+f
MX⊂*∩"g⊂(∃j(#&
($amL.V#'
FA⊂⊂λ⊂⊂⊂⊂λ⊂"f)QP'jj∀h)∀⊃_q7y:→r⊃∪∪LZS∪XL∀]FEλ⊂⊂⊂⊂λ⊂⊂⊂"S"εE⊂λ⊂⊂⊂⊂⊃f)bFB IF CHR="D" THEN comment video synthesizer display;
BEGIN
INTEGER I,J;
REAL SX,SY,ASP,ASPEN;
REAL PX,PY; INTEGER MODP;
SYNLAS←TRUE;
MODP←SYPOS MOD (SDISWID*SDISHIG);
PX←MODP MOD SDISWID;
MODP←MODP%SDISWID;
PY←SDISHIG-MODP-1;
PX←2*PX-SDISWID+1;
PY←2*PY-SDISHIG+1;
SX←1; SY←1; ASPEN←SASPECT*SDISWID/SDISHIG;
ASP←PIC[PCLN]/PIC[LNBY];
IF ASP>ASPEN THEN SX←ASPEN/ASP ELSE SY←ASP/ASPEN;
SX←SX*SSIZE; SY←SY*SSIZE;
SETFORMAT(0,2);
SCREEN(-SDISWID,-SDISHIG,SDISWID,SDISHIG);
MAPGRY(MAPTF,MAPBT); GRAY(PIC[0]);
I←PIC[BYBI];
IF SYNMAP(I)>0 ∨ SDISHIG*SDISWID>1 THEN
BEGIN~∀@@@@@@@@A∪AM ∪'⊃%∞U' %'/∪λxbA)⊃∃≤A∂Q P λDM
-&Q∩$LD])5!7)≠@Y⊃!≠tDRv~(@@@@@@@@@A %-≤vAIπ)β8Q!0ZDY!2ZDY!0VDY!2VDRv~∀@@@@@@@@A-∪λ!→1¬?A0['01→3¬?A2['21+1¬?A0W'01+3¬?A2W'21!∪π6A:XbRl~∀@@@@@@@@@A%A'39≠β Q$R|`AQ⊃≤~(@@@@@@@@@@@@↓¬∂∪8~∀@@@@@@@@@@@A∀
N∃"≥J:6εαB%%%Xh)↓↓α↓↓↓↓α↓↓↓↓α↓α~>∩α*mEc 1Eα$yα∩BM*A"NLr6εADI%%lhQ↓↓↓α↓↓↓↓α↓↓↓↓αα⊗*⊃Xh)↓↓α↓↓↓↓α↓↓↓α≤B>↑¬B9Q]%Xh)↓↓α↓↓↓↓α↓↓↓αL1αN∩M~"&≥U~∩&N<J⊃yE¬""⊗9¬αVR∩$1!
∩"⊃~∞Z~B%%→∩rR6B]"6A∩Eα6u KX4)↓α↓↓↓↓α↓↓↓↓∧*:↓lhQ↓↓↓α↓↓↓↓∧2>IαMzB&∞\∩f
&jiEαN$*A↓5
αV:RLa↓Aα$x4)↓α↓↓↓↓α↓α&→¬~f:6
↓"%%s↓⎇α≤"&N"L9*N∩M~↑&⊃q αR",p4)↓α↓↓↓↓α↓↓↓↓∧∩⊗≡→aPRα∧∧ααα∧∧ααα _b¬≤I~4DLu*4$M8y∀#s∀
DD,dλt-$HHbB∀HD"4≥j5∧JJd%e$m:DmαI
∧mj%↔0hR∧∧ααα∧∧ααα∧λE∀\Y`∞d
Q0uλ→J∀⊗¬V+∀⊗%V+∀⊗¬6+∀⊗%6*.c!$λλλ∧∧λλλ∧∧λ∃R(E∪⊗⊂Kz⊗4k¬∪⊗0Kz⊗+4k∃∃0!↔h,∃iV⊗*la↔h,UiVVεE⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂λ⊂⊂⊂⊂∀$amH↔V_P&∀d⊂∀(∩ama,P$nV@1-I));
IF SYNMAP(I)>0 THEN
BAGIN
E@%¬'
Q'e≥≠β !∩RRv4∀@@@@@@@@@@@A
∨$↓∃6bXDXbA <A !3U Q'39≠β Q$RRv~(@@@@@@@@@@@@↓⊂~⊃Xh)↓↓α↓↓↓↓α↓↓↓α≤B>↑¬B9Q]%Xh)↓↓α↓↓↓↓α↓↓↓αL1αN∩M~"&≥U~∩&N<J⊃yE¬""⊗9¬αVR∩$1!
∩"⊃~∞Z~B%%→∩rR6B]"6A2Eα6u KX4)↓α↓↓↓↓α↓↓↓↓∧*:↓lhQ↓↓↓α↓↓↓↓¬*:≡J
I"Bε≥YBu%Xh)↓↓α↓↓↓↓αα"ε~$z:⊗}%∩V∃LhQ↓↓↓α↓↓↓↓¬~fB>≥zNfB⎇→-ELhQ↓↓↓α↓↓↓↓∧zVRN%⊃!
E*1≥EI2⊃) %Xh)↓↓α↓↓↓↓ααN">:A≥Q]KX4)↓α↓↓↓↓α↓α∩=∧∩ε∞.dz≡}&t~"J]¬*:R&bα
ε∞\b>≤m; T∩
~.2>9Y≥EIXh)↓↓α↓↓↓↓ααN">:A5E%Xh)↓↓α↓↓↓↓αα⊗ 4AQ"αα∧∧α∧,J8PhPbα∧∧αα∧_d∧≤E'T$B∩
I∧,p≤=vnn]nBαε
≤vBπ≡\⊗fOO∀εF∞LnF}vW1PRα∧∧ααα∧∧∧∀,y→`hR∧∧ααα∧∧α∧LjHT<-$ "d≤ g0hR∧∧ααα∧∧α¬∀X→B¬≥¬J5Jd~:αd
:λTsXQ$ααα∧∧ααα
(Tb
αe¬↔4∧LuHXt-∩ Yt%β1Q hR∧∧ααα∧∧α¬≥→iD
≥xh∀e≤W1PPh$∧ααα∧∧αα∧YxE¬|λ~∧⎇~ Yt"α λDM≥y_BTDI~4DLu↔0hR∧∧ααα∧∧ᬬyT|%∧ T|" λDM≥y_CXh$∧ααα∧∧αα∧YxE¬|YxEα,λI∃≥<_G0hR∧∧ααα∧∧ᬬ≠y∧$M9 ∀:lYxEαk↔1PRα∧∧ααα∧∧¬¬Ev%%¬BYλDM≥y_B[1Q"αα∧∧ααα∧
¬M{%*¬JlλI∃≤D_u3XQ!PRα∧∧ααα∧∧¬≥Ev↔2¬≥≠v∪Z∧~:∧,uβr⊂*:⊃0u¬)⊃∩4jy1rλI4r∩(wc"H∧∧λλλ∧∧λ⊂4jt∩0k:⊂s∪KUt∩0k9∪PV+Wc"H∧∧λλλ∧∧λ∩1Dλ4t∂H~t⊃3D
∩⊃3D
v↔p*:⊃3Kh~tλ⊃)Jq(∀k≠p4t¬x4t⊃)gc"C!$λλλ∧∧λλλ
;↔tv¬)∀r6HWh∀v+zv*R
96Q.aQC"H∧∧λλλ∧∧λ∀pj(13J¬Y⊃∩4jy1)λ∩4r _k∩⊃ ~ur1¬I⊃∩4i 1j.aQHλλ∧∧λλλ∧ 1H∩λI4r∩(uR⊃∩*:r1∂F∀∃∩⊃)d⊃q5λH⊃JλHHU∪*u∪4¬I∀∪7$%.c"D∧λλλ∧∧λλ⊃
)q3Nd
Q0uλ→J∀⊗¬V+∀⊗%V+∀⊗¬6+∀⊗%6*.c!$λλλ∧∧λλλ
i1⊃3e ⊗⊂Wj4v¬I⊗0Wj+4v%J6⊂Wj
tv¬J60Wj*tv%J∩0vf+,E↔c"H∧∧λλλ∧∧λ⊂r kqq⊃λ9∪J&∃.c"D∧λλλ∧∧λλ⊃*(4q*λ9∪J.aQHλλ∧∧λλλ∧λStH +l+%F++ε∃(⊃ t⊃∀⊗*Z
⊂r e.c"D∧λλλ∧∧λλ∪jZ∀u∀E∧H⊂rλ→SQ3∧∧IPuIzj⊂r e)Il&TIl,E↔c"H∧∧λλλ∧∧λ∀r zj⊂r e.c"A∀∩⊂1JIsQ7jJU1.aQHλλ∧∧λλλ∧ 1H∩λI4r∩(uR⊃∩*:r1∂F∀∃∩⊃)d∀∃5λH⊃JλHHU∪*u∪4¬I∀∪7$%.c"D∧λλλ∧∧λλ∩λ~∪twiλ4∪te6.c"D∧λλλ∧∧λλ∪jZ∀u∀E∧JHJ'1"Hλ∧∧λλλ∧∧⊃∪hλ(0rs xwr3H9∀Uh
YU∩3∧λP0riIqfif⊗!⊂P(9s∪qc4l,NaQHλλ∧∧λλλ∧
r∪ue¬,*.aQHλλ∧∧λλλ∧
Q⊃⊂i J⊂r e.c"D∧λλλ∧∧λλ⊃)hβ"H∧∧λλλλY∀q#! ↓Dλλλ∧∧∩1Hλ9∀O(J$H∃∩λYB8{m]9;]∧∧≤X;LM{(~≥→]≠ml.c"D∧λλλ∧∧λλ⊂HXr3C!$λλλ∧∧λλλ →U⊃1hZH∩Kλ9∪Nc!$λλλ∧∧λλλ
(03λ
;∀v%H4tλ~t⊃3G1"Hλ∧∧λλλ∧∧∀Q0)D∀⊗
.h∩)j⊃1q*$∪3q
πc"C!$λλλ∧∧λλλ
;3S⊂*;qP3
8.c"AQHλλ∧∧λλλ∧ 3q∀y⊂4∪j4∪3q∧¬∩⊃∩*:r1
Iλ∩4r _j.c!$λλλ∧∧λλλ
↔s3hJλ∪3hD∩⊃∩*:r1∞aQHλλ∧∧λλλ∧ 3q∀y3q∀∧Y⊃∩4jy1∞c!$λλλ∧∧λλλ
7r⊃ ~r∩1eY3q∀¬V.c"D∧λλλ∧∧λλ∀lJT¬2⊃∩*:r1
f↔c"H∧∧λλλ∧∧λ∀⊗+vJT⊗%Y⊃∩4i 1jl'1"C"D∧λλλ∧∧λλ∀kl.h
;7l.dλ4t⊃)kr⊂4jλ0u
Iλ∩4ui_r⊃ ~r∩1g1"Hλ∧∧λλλ∧∧⊂4tz∩0vjλs∪W%z∩0viIPV7'1"Hλ∧∧λλλ∧∧∩1Hλ~t∂P*:⊃3H
I⊃3H
;↔p4jλ3Kp*:λ⊃3
8(∀v+x4th~t⊃3G1"C"D∧λλλ∧∧λλ∀ktv
I
r6Q'4∀v7j;*R∀i≠Q.c!!"Hλ∧∧λλλ∧∧∀ptHX3J)λ∩4ui_2λI4r∩(u∩⊃∩*:r1 λ∩4r _j.c!$λλλ∧∧λλλ _H∩⊃ ~r∩1e)⊃∩4jy1∂L$
∩⊃3Dλq5⊃λHJλQλEU∪4:∪4
∪7(E↔c"H∧∧λλλ∧∧λ⊃∀I83Nh
(0u⊂)e∀⊗&∃∀⊗+&∃∀⊗
f∃∀⊗*f∃.c"D∧λλλ∧∧λλ∃I_
∪⊗λ+t⊗*;∪⊗(+t⊗+*;+∃6λ+t⊗
j;∃6(+t⊗*j;+∀∩(;l↔+¬V*.c!$λλλ∧∧λλλλ9∪WqhH⊂r∪E¬,*.aQHλλ∧∧λλλ∧ u5∀jJJλHλ9⊂3SHYλλIH:Stjλ9∪J)Dv-)If⊗J.c!$λλλ∧∧λλλλZP4q%λr∪J'1"Hλ∧∧λλλ∧∧⊃StD Wl+ε∃+%F+(λIh⊃∀~4
⊂i J.c!$λλλ∧∧λλλ
9∪ujλ9∪J.aQB(∩λ_U∪sH[u∀U(Wc"H∧∧λλλ∧∧λ∩1D ⊃∩4i 1jRλI4ur(GL(∃ λ3H∀
Z⊃⊃⊃E∧Q⊃JI4⊗u Z∩∀ [(J.aQHλλ∧∧λλλ∧ ⊂4∪j;r⊂4 zjl.aQHλλ∧∧λλλ∧ u5∀jJJλJD%.c"D∧λλλ∧∧λλ⊃ t⊂P0i9∪qwi→Pr∀Jt∃3U →λ⊂P(9s∪qc4l-!λ(0rs xfil&'c"H∧∧OW(-1);
RDDCHN(CHN);
END
ELSE
IF CHR="A" THEN comment arty bug halftone;
BEGIN
INTEGER J,CHN;
REAL SX,SY,ASP,ASPEN;
REAL PX,PY; INTEGER MODP;
SYNLAS←FALSE;
MODP←HAPOS MOD (HDISWID*HDISHIG);
PX←MODP MOD HDISWID;
MODP←MODP%HDISWID;
PY←HDISHIG-MODP-1;
PX←2*PX-HDISWID+1;
PY←2*PY-HDISHIG+1;
SX←1; SY←1; ASPEN←HASPECT*HDISWID/HDISHIG;
ASP←PIC[PCLN]/PIC[LNBY];
IF ASP>ASPEN THEN SX←ASPEN/ASP ELSE SY←ASP/ASPEN;
SX←SX*HSIZE; SY←SY*HSIZE;
SCREEN(-HDISWID,-HDISHIG,HDISWID,HDISHIG);
IF HDISHIG*HDISWID>1 THEN GETDDF("DD.TMP[TMP,HPM]");
DRKEN; RECTAN(PX-1,PY-1,PX+1,PY+1);
VIDEO(LXB←PX-SX,LYB←PY-SY,UXB←PX+SX,UYB←PY+SY,PIC[0],-4);
CHN←GDDCHN(-1);
ERASE(CHN);
FOR J←1,1,1,1,1,1 DO DPYUP(CHN);
OUTSTR(" CHANNEL "&CVOS(CHN)&'15&'12);
SHOW(CHN);
HAFTONE←TRUE;
IF HDISHIG*HDISWID>1 THEN PUTDDF("DD.TMP[TMP,HPM]");
HAPOS←HAPOS+1;
OUTSTR("*");
DO BACKLOG←INCHRW UNTIL BACKLOG≠'15∧BACKLOG≠'12;
SHOW(-1);
RDDCHN(CHN);
END
ELSE
IF CHR="X" THEN comment send previous halftone to the XGP;
BEGIN
INTEGER J;
OUTSTR("SIZE (-5 to +5):");
J←CVD(INCHWL);
IF J≠0 THEN
BEGIN
IF HAFTONE THEN BEGIN INVEN; RECTAN(-1000,-1000,1000,1000); END;
XGPUP(J);
IF HAFTONE THEN BEGIN INVEN; RECTAN(-1000,-1000,1000,1000); END;
END
ELSE
OUTSTR("aborted"&'15&'12);
END
ELSE
IF CHR=">" THEN comment make a DD buffer into an MIT transferrable file;
BEGIN
OUTSTR("OUTPUT FILE NAME:");
IF ¬PUTMIT(INCHWL) THEN OUTSTR("aborted"&'15&'12);
END
ELSE
IF CHR="<" THEN comment display MIT transferrable file;
BEGIN
INTEGER J,CHN;
OUTSTR("INPUT FILE NAME:");
DRKEN; RECTAN(-100,-100,100,100);
IF ¬GETMIT(INCHWL) THEN OUTSTR("aborted"&'15&'12)
ELSE
BEGIN
CHN←GDDCHN(-1);
OUTSTR(" CHANNEL "&CVOS(CHN)&'15&'12);
ERASE(CHN);
FOR J←1,1,1,1,1 DO DPYUP(CHN);
SHOW(CHN);
OUTSTR("*");
DO BACKLOG←INCHRW UNTIL BACKLOG≠'15∧BACKLOG≠'12;
RDDCHN(CHN);
SHOW(-1);
END;
END
ELSE
IF CHR="#" THEN comment switch a video switch output;
BEGIN
INTEGER J,K;
OUTSTR(" LINE:"); J←CVO(INCHWL);
OUTSTR("CHANNEL:"); K←CVO(INCHWL);
SHOW(K,J);
END
ELSE
IF CHR="P" THEN comment list a picture on the tty;
BEGIN
INTEGER I,J,K,L,M;
REAL ASP;
INTEGER SX,SY;
ASP←PIC[PCLN]/PIC[LNBY];
SX←TWID; SY←SX*ASP*TASPECT;
IF SY>TLEN THEN BEGIN SX←SX*TLEN/SY; SY←TLEN; END;
BEGIN
REAL ARRAY TMP[-1:SY,-1:SX];
REAL PCMAX;
PCMAX←2↑PIC[BYBI]-1;
FOR I←0 STEP 1 UNTIL SX-1 DO
FOR J←0 STEP 1 UNTIL SY-1 DO
TMP[J,I]←PIXEL(PIC[0],PIC[PCLN]*J%SY,PIC[LNBY]*I%SX)/PCMAX;
CALL(0,"RESET");
OUTSTR('15&'12);
FOR J←0 STEP 1 UNTIL SY-1 DO
BEGIN
FOR I←0 STEP 1 UNTIL SX-1 DO
BEGIN¬
REAL ERR;
IF (ERR←TMP[J,I])<0.5 THEN OUTSTR("*") ELSE
BEGIN
OUTSTR(" ");
ERR←ERR-1;
END;
ERR←ERR/16;
TMP[J+1,I-1]←TMP[J+1,I-1]+3*ERR;
TMP[J+1,I]←TMP[J+1,I]+5*ERR;
TMP[J+1,I+1]←TMP[J+1,I+1]+ERR;
TMP[J,I+1]←TMP[J,I+1]+7*ERR;
END;
OUTSTR('15&'12);
END;
END;
END
ELSE
IF CHR="∂" THEN comment add a letter to a font;
BEGIN
INTEGER LETR; STRING FOFIL;
OUTSTR("FONT FILE:"); FOFIL←INCHWL;
OUTSTR("LETTER:"); LETR←INCHWL;
DDFONT(LXB,LYB,UXB,UYB, FOFIL, LETR);
END
ELSE
IF CHR="π" THEN comment output dd buf to jarvis term.;
begin
if ¬pjup then outstr("pjup failed, try again.");
outstr('15&'12);
end
ELSE
IF CHR="λ" THEN comment make an XGPable file;
BEGIN
INTEGER I,J,K,L,M; REAL D,G,O; STRING S;
OPEN(1,"DSK",0,0,3,0,0,M);
M←0;
DO
BEGIN
OUTSTR("OUTPUT XGP FILE NAME:");
ENTER(1,INCHWL,M);
END
UNTIL ¬M;
OUTSTR("DENSITY (0 (normal) to 1):"); D←REALSCAN(S←INCHWL,M);
O←'77+'40*D; G←(D+1)*'40/2↑PIC[BYBI];
FOR I←0 STEP 1 UNTIL PIC[PCLN]-1 DO
BEGIN
FOR J←0 STEP 1 UNTIL PIC[LNBY]-1 DO
OUT(1,M←O-G*PIXEL(PIC[0],I,J));
OUT(1,'15&'12);
END;
CLOSE(1);
END
ELSE
IF CHR="C" THEN comment step past a certain number of pictures;
BEGIN
INTEGER T;
OUTSTR("SKIP HOW MANY (NEGATIVE TO BACKSPACE):");
T←CVD(INCHWL);
IF SYNLAS THEN SYPOS←SYPOS+T ELSE HAPOS←HAPOS+T;
END
ELSE
IF CHR="K" THEN comment clear the video synthesizer;
BEGIN
INTEGER T;
FOR T←0 STEP 1 UNTIL 7 DO ERASE(SYNMAP(T));
OUTSTR('15&'12);
END
ELSE
IF CHR="↔" THEN comment gronk synthesizer intensity table;
BEGIN
STRING SI; INTEGER I;
OUTSTR("TRANSFER FUNCTION (about -2.0 to 2.0):");
IF ¬MAPGRY(MAPTF←REALSCAN(SI←INCHWL,I),MAPBT) THEN
OUTSTR("sorry, ELF not available"&'15&'12);
END
ELSE
IF CHR="S" THEN comment change size of displays;
BEGIN
STRING INP; INTEGER FOO,INC;
REAL T;
OUTSTR('15&'12&"FOR SYNTHESIZER, HALFTONES OR PRINTOUT (S, H OR P)?");
INC←UCONV(INCHWL);
IF INC="S" THEN
BEGIN
INTEGER I;
SYNLAS←TRUE;
SETFORMAT(0,2);
OUTSTR("PICTURE SIZE (1 IS FULLSIZE, NOW"&CVF(SSIZE)&"):"); INP←INCHWL;
T←REALSCAN(INP,FOO);
IF T≠0 THEN SSIZE←ABS(T);
OUTSTR("ASPECT RATIO (HEIGHT/WIDTH OF SCREEN, NOW"&CVF(SASPECT)&"):");
INP←INCHWL;
T←REALSCAN(INP,FOO);
IF T>0 THEN SASPECT←T;
OUTSTR("NUMBER OF PICTURES IN X DIRECTION:");
T←ABS(CVD(INCHWL));
IF T>0∧T≠SDISWID THEN
BEGIN
SDISWID←T;
SYPOS←0;
END;
OUTSTR("NUMBER OF PICTURES IN Y DIRECTION:");
T←ABS(CVD(INCHWL));
IF T>0∧T≠SDISHIG THEN
BEGIN
SDISHIG←T;
SYPOS←0;
END;
SCREEN(-1,-1,1,1);
DRKEN; RECTAN(-1000,-1000,1000,1000);
IF SDISHIG*SDISWID>1 THEN
BEGIN
OUTSTR("ERASE?");
IF UCONV(INCHWL)="Y" THEN
FOR I←0 STEP 1 UNTIL 7 DO
PUTDDF("DD"&CVS(I)&".TMP[TMP,HPM]")
ELSE
BEGIN
OUTSTR("REDRAW OLD DISPLAY NOW?");
IF UCONV(INCHWL)="Y" THEN
FOR I←7 STEP -1 UNTIL 0 DO
IF SYNMAP(I)≥0 THEN
BEGIN
IF I=0 THEN MAPGRY(MAPTF,MAPBT);
SHOWA('47);
GETDDF("DD"&CVS(I)&".TMP[TMP,HPM]");
ERASE(SYNMAP(I));
DPYUP(SYNMAP(I)); DPYUP(SYNMAP(I));
DPYUP(SYNMAP(I)); DPYUP(SYNMAP(I));
SHOWA('47);
END;
HAFTONE←TRUE;
OUTSTR("*");
DO BACKLOG←INCHRW UNTIL BACKLOG≠'15∧BACKLOG≠'12;
END;
END;
END
ELSE IF INC="H" THEN
BEGIN
SYNLAS←FALSE;
SETFORMAT(0,2);
OUTSTR("PICTURE SIZE (1 IS FULLSIZE, NOW"&CVF(HSIZE)&"):"); INP←INCHWL;
T←REALSCAN(INP,FOO);
IF T≠0 THEN HSIZE←ABS(T);
OUTSTR("ASPECT RATIO (HEIGHT/WIDTH OF SCREEN, NOW"&CVF(HASPECT)&"):");
INP←INCHWL;
T←REALSCAN(INP,FOO);
IF T>0 THEN HASPECT←T;
OUTSTR("NUMBER OF PICTURES IN X DIRECTION:");
T←ABS(CVD(INCHWL));
IF T>0∧T≠HDISWID THEN
BEGIN
HDISWID←T;
HAPOS←0;
END;
OUTSTR("NUMBER OF PICTURES IN Y DIRECTION:");
T←ABS(CVD(INCHWL));
IF T>0∧T≠HDISHIG THEN
BEGIN
HDISHIG←T;
HAPOS←0;
END;
SCREEN(-1,-1,1,1);
DRKEN; RECTAN(-1000,-1000,1000,1000);
IF HDISHIG*HDISWID>1 THEN PUTDDF("DD.TMP[TMP,HPM]");
END
ELSE IF INC="P" THEN
BEGIN
SETFORMAT(0,2);
OUTSTR("ASPECT RATIO OF TTY (CHRS/IN, VERTICAL/HORIZONTAL, NOW "&
CVF(TASPECT)&"):");
INP←INCHWL;
T←REALSCAN(INP,FOO);
IF T≠0 THEN TASPECT←ABS(T);
OUTSTR("WIDTH OF TTY DISPLAYS (NOW "&CVS(TWID)&"):");
INP←INCHWL;
T←REALSCAN(INP,FOO);
IF T≠0 THEN TWID←ABS(T);
OUTSTR("MAXIMUM HEIGHT OF TTY DISPLAYS (NOW "&CVS(TLEN)&"):");
INP←INCHWL;
T←REALSCAN(INP,FOO);
IF T≠0 THEN TLEN←ABS(T);
END;
END
ELSE
IF CHR="F" THEN comment high pass filter;
BEGIN
INTEGER WINDOW;
OUTSTR(" WINDOW SIZE:");
WINDOW←CVD(INCHWL);
IF WINDOW>1 THEN
BEGIN
INTEGER ARRAY T[0:PHAVE];
PASSHI(PIC[0],WINDOW,T[0]);
ENHANCE(T[0]);
COPPIC(T[0],PIC[0]);
END
ELSE OUTSTR("aborted"&'15&'12);
END
α ELSE
IF CHR="L" THEN comment low pass filter;
BEGIN
INTEGER ARRAY T[0:PHAVE];
IF PIC[PCLN]≥2∧PIC[LNBY]≥2 THEN
BEGIN
HAFPIC(PIC[0],T[0],8);
COPPIC(T[0],PIC[0]);
END;
PWANT←PHAVE←PIXDIM(PIC[PCLN],PIC[LNBY],PIC[BYBI]);
INITED←FALSE;
OUTSTR('15&'12);
OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
" BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
END
ELSE
IF CHR="W" THEN comment select a window;
BEGIN
INTEGER XL,XH,YL,YH,FOO; REAL A,B;
STRING INFL;
OUTSTR('15&'12);
OUTSTR("LOW X, HIGH X (PIXELS OR FRACTION):"); INFL←INCHWL;
XL←A←REALSCAN(INFL,FOO);
XH←B←REALSCAN(INFL,FOO);
IF ABS(A)≤1 ∧ ABS(B)≤1 THEN
BEGIN
XL←A*PIC[LNBY];
XH←B*PIC[LNBY];
END;
IF XL>XH THEN XL↔XH;
XL←XL MAX 0; XH←XH MIN (PIC[LNBY]-1);
IF (XH-XL+1)>0 THEN
BEGIN
OUTSTR("LOW Y, HIGH Y:"); INFL←INCHWL;
YL←A←REALSCAN(INFL,FOO);
YH←B←REALSCAN(INFL,FOO);
IF ABS(A)≤1 ∧ ABS(B)≤1 THEN
BEGIN
YL←A*PIC[PCLN];
YH←B*PIC[PCLN];
END;
IF YL>YH THEN YL↔YH;
YL←YL MAX 0; YH←YH MIN (PIC[PCLN]-1);
IF (YH-YL+1)>0 THEN
BEGIN
INTEGER ARRAY T[0:PIXDIM(YH-YL+1,XH-XL+1,PIC[BYBI])];
MAKPIX(YH-YL+1,XH-XL+1,PIC[BYBI],T[0]);
SELECT(PIC[0],YL,XL,T[0]);
COPPIC(T[0],PIC[0]);
OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
" BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
PWANT←PHAVE←PIXDIM(PIC[PCLN],PIC[LNBY],PIC[BYBI]);
INITED←FALSE;
END;
END;
END
ELSE
IF CHR="Z" THEN comment change size of a picture;
BEGIN
INTEGER FOO;
STRING INFL;
IF LENGTH(BACKLOG)=0 THEN
BEGIN
OUTSTR('15&'12);
OUTSTR("DILATION FACTORS (EG. .5 = HALF SIZE) X, Y:"); INFL←INCHWL;
WID←ABS(REALSCAN(INFL,FOO))*PIC[LNBY]; IF WID=0 THEN WID←PIC[LNBY];
HIG←ABS(REALSCAN(INFL,FOO))*PIC[PCLN]; IF HIG=0 THEN HIG←PIC[PCLN];
OUTSTR("NUMBER OF BITS:"); BITS←(CVD(INCHWL) MIN 36);
IF BITS≤0 THEN BITS←PIC[BYBI];
IF BITS≠PIC[BYBI]∨WID≠PIC[LNBY]∨HIG≠PIC[PCLN] THEN
BEGIN
PUTPFL(PIC[0],"TMP.TMP[TMP,HPM]");
PWANT←PIXDIM(HIG,WID,BITS);
BACKLOG←"Z ";
END;
END
ELSE
BEGIN
INTEGER ARRAY T[0:PFLDIM("TMP.TMP[TMP,HPM]")];
GETPFL("TMP.TMP[TMP,HPM]",T[0]);
MAKPIX(HIG,WID,BITS,PIC[0]);
OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
" BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
SHRINK(T[0],PIC[0]);
BACKLOG←"";
INITED←FALSE;
END;
END
ELSE
IF CHR="*" THEN comment general geometric transformation;
BEGIN
INTEGER FOO;
STRING INFL;
own string tr1,tr2,tr3;
IF LENGTH(BACKLOG)=0 THEN
BEGIN
integer com;
OUTSTR('15&'12);
OUTSTR("Transform (? for help):"); com←inchrw;
WHILE com="?" DO
BEGIN
outstr("
R Rotate
E Enter transform matrix
Transform:");
com←inchrw;
END;
COM←COM LAND '137;
if com="R" then
begin
end
else if com="E" then
begin
outstr("nter transform matrix."&'15&'12);
outstr("tr[1,1] tr[1,2] tr[1,3] ← ");loded(tr1&'12);tr1←inchwl;
outstr("tr[2,1] tr[2,2] tr[2,3] ← ");loded(tr2&'12);tr2←inchwl;
outstr("tr[3,1] tr[3,2] tr[3,3] ← ");loded(tr3&'12);tr3←inchwl;
outstr("height width bits ← ");loded(cvs(pic[pcln])&" "&cvs(pic[lnby])
&" "&cvs( pic[bybi] ) & '12); infl ← inchwl;
hig←intscan(infl,foo); wid←intscan(infl,foo); bits←intscan(infl,foo);
backlog←"*E";
PUTPFL(PIC[0],"TMP.TMP[TMP,HPM]");
end;
IF BITS≠PIC[BYBI]∨WID≠PIC[LNBY]∨HIG≠PIC[PCLN] THEN
BEGIN
PWANT←PIXDIM(HIG,WID,BITS);
BACKLOG←"* ";
END;
END
ELSE
BEGIN
INTEGER ARRAY T[0:PFLDIM("TMP.TMP[TMP,HPM]")];
real array tr[1:3,1:3];
GETPFL("TMP.TMP[TMP,HPM]",T[0]);
MAKPIX(HIG,WID,BITS,PIC[0]);
OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
" BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
infl←tr1;tr[1,1]←realscan(infl,foo);tr[1,2]←realscan(infl,foo);tr[1,3]←realscan(infl,foo);
infl←tr2;tr[2,1]←realscan(infl,foo);tr[2,2]←realscan(infl,foo);tr[2,3]←realscan(infl,foo);
infl←tr3;tr[3,1]←realscan(infl,foo);tr[3,2]←realscan(infl,foo);tr[3,3]←realscan(infl,foo);
pixtrn(t[0],tr,pic[0]);
BACKLOG←"";
INITED←FALSE;
END;
END
ELSE
IF CHR="U" THEN comment remove blank border from a picture;
BEGIN
INTEGER ARRAY ROW[0:PIC[PCLN]-1],COL[0:PIC[LNBY]-1];
INTEGER FHX,FHY,I,K,FLX,FLY;
ROWSUM(PIC[0],ROW[0]);
K←0; FOR I←0 STEP 1 UNTIL PIC[PCLN]-1 DO K←K+ROW[I];
K←K/PIC[PCLN]; FLY←0; WHILE ROW[FLY]<K/2 DO FLY←FLY+1;
FHY←PIC[PCLN]-1; WHILE ROW[FHY]<K/2 DO FHY←FHY-1;
IF ROW[FLY]<K/1.5 THEN FLY←FLY+1;
IF ROW[FLY]<K/1.5 THEN FLY←FLY+1;
COLSUM(PIC[0],COL[0]);
K←0; FOR I←0 STEP 1 UNTIL PIC[LNBY]-1 DO K←K+COL[I];
K←K/PIC[LNBY]; FLX←0; WHILE COL[FLX]<K/2 DO FLX←FLX+1;
FHX←PIC[LNBY]-1; WHILE COL[FHX]<K/2 DO FHX←FHX-1;
WID←FHX-FLX+1; HIG←FHY-FLY+1;
IF BITS≠PIC[BYBI]∨WID≠PIC[LNBY]∨HIG≠PIC[PCLN] THEN
BEGIN
INTEGER ARRAY T[0:PHAVE];
COPPIC(PIC[0],T[0]);
MAKPIX(HIG,WID,BITS,PIC[0]);
SELECT(T[0],FLY,FLX,PIC[0]);
OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
" BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
PHAVE←PWANT←PIXDIM(HIG,WID,BITS);
INITED←FALSE;
END;
END
ELSE
IF CHR="N" THEN comment apply noise remover;
BEGIN
CLEAN(PIC[0]);
OUTSTR('15&'12);
END
ELSE
IF CHR="V" THEN comment apply interest operator;
BEGIN
INTEGER WINDOW;
OUTSTR(" WINDOW SIZE:"); WINDOW←CVD(INCHWL);
IF WINDOW≥1 THEN
BEGIN
INTEREST(PIC[0],WINDOW,PIC[0]);
OUTSTR(CVS(PIC[PCLN])&" LINES x "&CVS(PIC[LNBY])&
" BYTES/LINE x "&CVS(PIC[BYBI])&" BITS/BYTE"&'15&'12);
PWANT←PHAVE←PIXDIM(PIC[PCLN],PIC[LNBY],PIC[BYBI]);
INITED←FALSE;
END
ELSE OUTSTR("aborted"&'15&'12);
END
ELSE
IF CHR="M" THEN comment pixel modification;
BEGIN
PRELOAD_WITH -1;
OWN INTEGER ARRAY PERM[-1:1024];
STRING INP; INTEGER FOO,I,J;
INTEGER LAST,THIS;
IF PERM[-1]=PIC[BYBI] THEN
BEGIN
OUTSTR(" ENTER NEW TRANSFORM?");
INP←UCONV(INCHRW);
END ELSE INP←"Y";
OUTSTR('15&'12);
IF INP="Y" THEN
BEGIN
PERM[-1]←PIC[BYBI];
OUTSTR(CVS(2↑PIC[BYBI])&" TOTAL GREY LEVELS, ENTER HOW MANY:");
FOO←(CVD(INCHWL) MAX 2) MIN 2↑PIC[BYBI];
LAST←0;
FOR I←0 STEP 1 UNTIL FOO-1 DO
BEGIN
THIS←((1 ASH PIC[BYBI])-1)*I%(FOO-1);
OUTSTR(CVS(THIS)&"→");
PERM[THIS]←CVD(INCHWL);
IF THIS>LAST THEN
FOR J←LAST STEP 1 UNTIL THIS DO
PERM[J]←(PERM[LAST]*(THIS-J)+PERM[THIS]*(J-LAST))%(THIS-LAST);
LAST←THIS;
END;
FOR I←0 STEP 1 UNTIL 2↑PIC[BYBI]-1 DO
PERM[I]←(PERM[I] MAX 0) MIN (2↑PIC[BYBI]-1);
END;
PERBIT(PIC[0],PERM[0]);
END
ELSE
IF CHR="G" THEN comment graph a histogram;
BEGIN
INTEGER ARRAY HIST[0:2↑PIC[BYBI]];
INTEGER FOO,I,J,MAV,CHN;
CHN←GDDCHN(-1);
OUTSTR(" CHANNEL "&CVOS(CHN)&'15&'12);
FOO←2↑PIC[BYBI]-1;
HISTOG(PIC[0],HIST[0]);
SCREEN(-.3,-.2,1.1,1.2);
DRKEN; RECTAN(-100,-100,100,100);
LITEN;
LINE(0,0,0,1); LINE(0,1,1,1);
LINE(1,1,1,0); LINE(1,0,0,0);
LINE(0,.5,1,.5); LINE(0,.25,1,.25); LINE(0,.75,1,.75);
LINE(.5,0,.5,1); LINE(.25,0,.25,1); LINE(.75,0,.75,1);
MAV←0; FOR I←0 STEP 1 UNTIL FOO DO MAV←MAV MAX HIST[I];
MAV←MAV+1;
FOR I←1 STEP 1 UNTIL FOO DO
LINE((I-1)/FOO,HIST[I-1]/MAV,I/FOO,HIST[I]/MAV);
TXTPOS(0,-1/10,1/24,1/12); TEXT("0");
TXTPOS(1-LENGTH(CVS(2↑PIC[BYBI]))/24,-1/10,1/24,1/12);
TEXT(CVS(2↑PIC[BYBI]-1));
TXTPOS(-.07,0,1/24,1/12); TEXT("0");
TXTPOS(-.07-(LENGTH(CVS(MAV))-1)/24,1-1/12,1/24,1/12); TEXT(CVS(MAV));
ERASE(CHN);
FOR J←1,1,1,1,1 DO DPYUP(CHN);
HAFTONE←FALSE; LXB←LYB←-1; UXB←UYB←1;
SHOW(CHN);
OUTSTR("*");
DO BACKLOG←INCHRW UNTIL BACKLOG≠'15∧BACKLOG≠'12;
RDDCHN(CHN);
SHOW(-1);
END
ELSE
IF CHR="J" THEN comment graph a histogram;
BEGIN
INTEGER ARRAY HIST[0:2↑PIC[BYBI]];
INTEGER FOO,I,J,L,MAV,CHN;
CHN←GDDCHN(-1);
OUTSTR(" CHANNEL "&CVOS(CHN)&'15&'12);
FOO←2↑PIC[BYBI]-1;
HISTOG(PIC[0],HIST[0]);
SCREEN(-.3,-.2,1.1,1.2);
DRKEN; RECTAN(-100,-1000,1000,1000);
LITEN;
LINE(0,0,0,1); LINE(0,1,1,1);
LINE(1,1,1,0); LINE(1,0,0,0);
LINE(0,.5,1,.5); LINE(0,.25,1,.25); LINE(0,.75,1,.75);
LINE(.5,0,.5,1); LINE(.25,0,.25,1); LINE(.75,0,.75,1);
MAV←0; FOR I←0 STEP 1 UNTIL FOO DO MAV←MAV + HIST[I];
L←J←0;
FOR I←1 STEP 1 UNTIL FOO DO
BEGIN
L←J;
J←J+HIST[I];
LINE((I-1)/FOO,L/MAV,I/FOO,J/MAV);
END;
TXTPOS(0,-1/10,1/24,1/12); TEXT("0");
TXTPOS(1-LENGTH(CVS(2↑PIC[BYBI]))/24,-1/10,1/24,1/12);
TEXT(CVS(2↑PIC[BYBI]-1));
TXTPOS(-.07,0,1/24,1/12); TEXT("0");
TXTPOS(-.07-(LENGTH(CVS(MAV))-1)/24,1-1/12,1/24,1/12); TEXT(CVS(MAV));
ERASE(CHN);
FOR J←1,1,1,1,1 DO DPYUP(CHN);
SHOW(CHN);
HAFTONE←FALSE; LXB←LYB←-1; UXB←UYB←1;
OUTSTR("*");
DO BACKLOG←INCHRW UNTIL BACKLOG≠'15∧BACKLOG≠'12;
RDDCHN(CHN);
SHOW(-1);
END
ELSE
IF CHR="E" THEN comment apply histogram normalizer;
BEGIN
ENHANCE(PIC[0]);
OUTSTR('15&'12);
END
ELSE
IF CHR="Y" THEN comment apply vert sync loss correction;
BEGIN
SYNCHRONIZE(PIC[0]);
OUTSTR('15&'12);
END
ELSE
IF CHR="Q" THEN comment exit;
BEGIN
if outddcalled then OUTDD('40&'15&'12);
CALL(0,"EXIT");
END
ELSE
BEGIN comment an unrecognized character;
IF CHR='12 THEN OUTSTR('15) ELSE
OUTSTR("?"&'15&'12);
END;
END;
PHAVE←PWANT;
END;
END "PIX";